home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue30 / winmac / WINMAC.ZIP / SRMAIN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-10-24  |  17.3 KB  |  629 lines

  1. {$I SRCOMOPT.INC}
  2. {$DEFINE DEMO}  {Remove the period to the left of the $ sign in order to view
  3. the demo macro set}
  4. unit Srmain;
  5.  
  6. interface
  7.  
  8. uses Windows, Classes, Graphics, Forms, Controls, WMacro,
  9.   StdCtrls, SysUtils, Messages, Dialogs, ComCtrls, Grids;
  10.  
  11. type
  12.   TSuperRecorder = class(TForm)
  13.     MacroSet1: TMacroSet;
  14.     Label2: TLabel;
  15.     gbGlobalSettings: TGroupBox;
  16.     SaveBtn: TButton;
  17.     LoadBtn: TButton;
  18.     Merge: TCheckBox;
  19.     RecordKeyMsg: TLabel;
  20.     ScrapMacroKeyMsg: TLabel;
  21.     CancelKeyMsg: TLabel;
  22.     Memo1: TMemo;
  23.     PauseKeyMsg: TLabel;
  24.     DeleteBtn: TButton;
  25.     gbMouseRelevant: TGroupBox;
  26.     MousePointer: TRadioButton;
  27.     MouseWindow: TRadioButton;
  28.     MouseScreen: TRadioButton;
  29.     OpenDialog1: TOpenDialog;
  30.     SaveDialog1: TSaveDialog;
  31.     btSendKeys: TButton;
  32.     edSendKeys: TEdit;
  33.     btAppActivate: TButton;
  34.     gbToggles: TGroupBox;
  35.     CapsLockButton: TButton;
  36.     NumlockButton: TButton;
  37.     ScrollLockButton: TButton;
  38.     edAppActivate: TEdit;
  39.     StringGrid1: TStringGrid;
  40.     CancelCheck: TCheckBox;
  41.     FastPlay: TCheckBox;
  42.     SysWide: TCheckBox;
  43.     gbMouseMessages: TGroupBox;
  44.     MouseNone: TRadioButton;
  45.     MouseClicks: TRadioButton;
  46.     MouseEverything: TRadioButton;
  47.     btApply: TButton;
  48.     gbNewMacro: TGroupBox;
  49.     MacroKeyComboBox1: TMacroKeyComboBox;
  50.     edMacroName: TEdit;
  51.     btCreateKeyMacro: TButton;
  52.     btCreateCodeMacro: TButton;
  53.     Label7: TLabel;
  54.     Label8: TLabel;
  55.     StatusBar1: TStatusBar;
  56.     procedure FastPlayClick(Sender: TObject);
  57.     procedure SysWideClick(Sender: TObject);
  58.     procedure MouseNoneClick(Sender: TObject);
  59.     procedure MouseClicksClick(Sender: TObject);
  60.     procedure MouseEverythingClick(Sender: TObject);
  61.     procedure btCreateKeyMacroClick(Sender: TObject);
  62.     procedure btApplyClick(Sender: TObject);
  63.     procedure FormCreate(Sender: TObject);
  64.     procedure MacroSet1Played(Sender: TObject; State: TUserMacroEngineState);
  65.     procedure SaveBtnClick(Sender: TObject);
  66.     procedure LoadBtnClick(Sender: TObject);
  67.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  68.     procedure btCreateCodeMacroClick(Sender: TObject);
  69.     procedure CancelCheckClick(Sender: TObject);
  70.     procedure DeleteBtnClick(Sender: TObject);
  71.     procedure MousePointerClick(Sender: TObject);
  72.     procedure MouseWindowClick(Sender: TObject);
  73.     procedure MouseScreenClick(Sender: TObject);
  74.     procedure btSendKeysClick(Sender: TObject);
  75.     procedure MacroSet1Assigned(Sender: TObject; Macro: Pointer);
  76.     procedure btAppActivateClick(Sender: TObject);
  77.     procedure CapsLockButtonClick(Sender: TObject);
  78.     procedure ScrollLockButtonClick(Sender: TObject);
  79.     procedure NumlockButtonClick(Sender: TObject);
  80.     procedure FormActivate(Sender: TObject);
  81.   private
  82.     { Private declarations }
  83.   public
  84.     { Public declarations }
  85.   end;
  86.  
  87. var
  88.   SuperRecorder: TSuperRecorder;
  89.   OurWindow : HWND;
  90.   OldCursor,BIGPOINT : HCursor;
  91.  
  92. implementation
  93. const
  94.   OffOn : array[boolean] of string = ('OFF','ON ');
  95.   SlowMouseVDelta = 5;
  96.   SlowMouseHDelta = 5;
  97.   FastMouseVDelta = 30;
  98.   FastMouseHDelta = 30;
  99.  
  100. {$R *.DFM}
  101. {$IFDEF BLINDGUY}
  102. {$R BIGPOINT.RES}
  103. {$ENDIF}
  104.  
  105. procedure TSuperRecorder.FastPlayClick(Sender: TObject);
  106. begin
  107.   MacroSet1.FastPlayback:=FastPlay.Checked;
  108. end;
  109.  
  110. procedure TSuperRecorder.SysWideClick(Sender: TObject);
  111. begin
  112.   MacroSet1.SystemWide:=SysWide.Checked;
  113. end;
  114.  
  115. procedure TSuperRecorder.MouseNoneClick(Sender: TObject);
  116. begin
  117.   If MouseNone.Checked then MacroSet1.RecordMouse:=RMIgnore;
  118. end;
  119.  
  120. procedure TSuperRecorder.MouseClicksClick(Sender: TObject);
  121. begin
  122.   If MouseClicks.Checked then MacroSet1.RecordMouse:=RMClicksAndDrags;
  123. end;
  124.  
  125. procedure TSuperRecorder.MouseEverythingClick(Sender: TObject);
  126. begin
  127.   If MouseEverything.Checked then MacroSet1.RecordMouse:=RMAll;
  128. end;
  129.  
  130. procedure TSuperRecorder.btCreateKeyMacroClick(Sender: TObject);
  131. begin
  132.   try
  133.     With MacroSet1, MacroKeyComboBox1 do
  134.       If (MKey>0) then Add(MKey,ScrapMacro,edMacroName.Text,nil);
  135.   except
  136.   on Exception Do MessageBox(0,'An error occurred while adding the key macro','',MB_APPLMODAL);
  137.   end;
  138. end;
  139.  
  140. procedure TSuperRecorder.btApplyClick(Sender: TObject);
  141. begin
  142.   With MacroSet1 do begin
  143.     If MacrosOn then MacrosOff;
  144.     MacrosOn;
  145.   end;
  146.   
  147.   MacroSet1Assigned(Sender,nil);
  148. end;
  149.  
  150. function GetTopLevelWindow(Handle : HWND) : HWND;
  151. begin
  152.   while (GetParent(Handle)<>0) do Handle:=GetParent(Handle);
  153.   result:=Handle;
  154. end;
  155.  
  156. function GetNextTopLevelWindow(Handle : HWND) : HWND;
  157. var
  158.   ProcessID : Longint;
  159. begin
  160.   Result:=GetNextWindow(GetTopLevelWindow(Handle),GW_HWNDNEXT);
  161.   GetWindowThreadProcessID(Result,@ProcessID);
  162.   while (Result<>0) and ((ProcessID=GetCurrentProcessID) or (not IsWindowVisible(Result))) do begin
  163.     Result:=GetNextWindow(Result,GW_HWNDNEXT);
  164.     GetWindowThreadProcessID(Result,@ProcessID);
  165.   end;
  166. end;
  167.  
  168. procedure ExampleCodeMacroProcedure; export; stdcall;
  169. var
  170.  temp : array[0..32] of char;
  171. begin
  172.   sendmessage(findwindow(nil,'Calculator'),wm_gettext,sizeof(temp),longint(@temp));
  173.   MessageBox(0,pchar('Current window is: '+string(temp)),'Sample Code Macro',MB_APPLMODAL);
  174. end;
  175.  
  176. procedure PlaybackHOME; export; stdcall;
  177. begin
  178.   SuperRecorder.MacroSet1.SendKeys('{HOME}',True);
  179. end;
  180.  
  181. procedure PlaybackEND; export; stdcall;
  182. begin
  183.   SuperRecorder.MacroSet1.SendKeys('{END}',True);
  184. end;
  185.  
  186. procedure PlaybackINS; export; stdcall;
  187. begin
  188.   SuperRecorder.MacroSet1.SendKeys('{INS}',True);
  189. end;
  190.  
  191. procedure PlaybackDELETE; export; stdcall;
  192. begin
  193.   SuperRecorder.MacroSet1.SendKeys('{DELETE}',True);
  194. end;
  195.  
  196. procedure PlaybackPRTSC; export; stdcall;
  197. begin
  198.   SuperRecorder.MacroSet1.SendKeys('{PRTSC}',True);
  199. end;
  200.  
  201. procedure PlaybackPAUSE; export; stdcall;
  202. begin
  203.   SuperRecorder.MacroSet1.SendKeys('{PAUSE}',True);
  204. end;
  205.  
  206. Procedure RunProg(const Prog : Pchar);
  207. begin
  208.   WinExec(Prog,SW_SHOWNORMAL);
  209. end;
  210.  
  211. {$IFDEF DEMO}
  212. procedure RunCalc; export; stdcall;
  213. begin
  214.   RunProg('CALC.EXE');
  215. end;
  216.  
  217. procedure RunNotePad; export; stdcall;
  218. begin
  219.   RunProg('NOTEPAD.EXE');
  220. end;
  221.  
  222. procedure RunCalendar; export; stdcall;
  223. begin
  224.   RunProg('CALENDAR.EXE');
  225. end;
  226.  
  227. procedure RunClock; export; stdcall;
  228. begin
  229.   RunProg('CLOCK.EXE');
  230. end;
  231.  
  232. procedure MoveMouseUp; export; stdcall;
  233. var
  234.   MousePos : TPoint;
  235. begin
  236.   GetCursorPos(MousePos);
  237.   MousePos.y:=MousePos.y-SlowMouseVDelta;
  238.   If (MousePos.y<0) then MousePos.y:=0;
  239.   SetCursorPos(MousePos.x,MousePos.y);
  240. end;
  241.  
  242. procedure MoveMouseLeft; export; stdcall;
  243. var
  244.   MousePos : TPoint;
  245. begin
  246.   GetCursorPos(MousePos);
  247.   MousePos.x:=MousePos.x-SlowMouseHDelta;
  248.   If (MousePos.x<0) then MousePos.x:=0;
  249.   SetCursorPos(MousePos.x,MousePos.y);
  250. end;
  251.  
  252. procedure MoveMouseRight; export; stdcall;
  253. var
  254.   MousePos : TPoint;
  255. begin
  256.   GetCursorPos(MousePos);
  257.   MousePos.x:=MousePos.x+SlowMouseHDelta;
  258.   SetCursorPos(MousePos.x,MousePos.y);
  259. end;
  260.  
  261. procedure MoveMouseDown; export; stdcall;
  262. var
  263.   MousePos : TPoint;
  264. begin
  265.   GetCursorPos(MousePos);
  266.   MousePos.y:=MousePos.y+SlowMouseVDelta;
  267.   SetCursorPos(MousePos.x,MousePos.y);
  268. end;
  269.  
  270. procedure MoveMouseUpFast; export; stdcall;
  271. var
  272.   MousePos : TPoint;
  273. begin
  274.   GetCursorPos(MousePos);
  275.   MousePos.y:=MousePos.y-FastMouseVDelta;
  276.   If (MousePos.y<0) then MousePos.y:=0;
  277.   SetCursorPos(MousePos.x,MousePos.y);
  278. end;
  279.  
  280. procedure MoveMouseLeftFast; export; stdcall;
  281. var
  282.   MousePos : TPoint;
  283. begin
  284.   GetCursorPos(MousePos);
  285.   MousePos.x:=MousePos.x-FastMouseHDelta;
  286.   If (MousePos.x<0) then MousePos.x:=0;
  287.   SetCursorPos(MousePos.x,MousePos.y);
  288. end;
  289.  
  290. procedure MoveMouseRightFast; export; stdcall;
  291. var
  292.   MousePos : TPoint;
  293. begin
  294.   GetCursorPos(MousePos);
  295.   MousePos.x:=MousePos.x+FastMouseHDelta;
  296.   SetCursorPos(MousePos.x,MousePos.y);
  297. end;
  298.  
  299. procedure MoveMouseDownFast; export; stdcall;
  300. var
  301.   MousePos : TPoint;
  302. begin
  303.   GetCursorPos(MousePos);
  304.   MousePos.y:=MousePos.y+FastMouseVDelta;
  305.   SetCursorPos(MousePos.x,MousePos.y);
  306. end;
  307.  
  308. procedure MoveMouseUpperLeft; export; stdcall;
  309. var
  310.   MousePos : TPoint;
  311. begin
  312.   With MousePos do begin
  313.     x:=0;
  314.     y:=0;
  315.   end;
  316.   SetCursorPos(MousePos.x,MousePos.y);
  317. end;
  318.  
  319. procedure MoveMouseUpperRight; export; stdcall;
  320. var
  321.   MousePos : TPoint;
  322. begin
  323.   With MousePos do begin
  324.     x:=2048;
  325.     y:=0;
  326.   end;
  327.   SetCursorPos(MousePos.x,MousePos.y);
  328. end;
  329.  
  330. procedure MoveMouseLowerLeft; export; stdcall;
  331. var
  332.   MousePos : TPoint;
  333.   ScreenHeight : Integer;
  334. begin
  335.   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  336.   With MousePos do begin
  337.     x:=0;
  338.     y:=ScreenHeight;
  339.   end;
  340.   SetCursorPos(MousePos.x,MousePos.y);
  341. end;
  342.  
  343. procedure MoveMouseLowerRight; export; stdcall;
  344. var
  345.   MousePos : TPoint;
  346.   ScreenWidth, ScreenHeight : Integer;
  347. begin
  348.   ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
  349.   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  350.   With MousePos do begin
  351.     x:=ScreenWidth;
  352.     y:=ScreenHeight;
  353.   end;
  354.   SetCursorPos(MousePos.x,MousePos.y);
  355. end;
  356.  
  357. procedure MoveMouseCenter; export; stdcall;
  358. var
  359.   MousePos : TPoint;
  360.   ScreenWidth, ScreenHeight : Integer;
  361. begin
  362.   ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
  363.   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  364.   With MousePos do begin
  365.     x:=ScreenWidth div 2;
  366.     y:=ScreenHeight div 2;
  367.   end;
  368.   SetCursorPos(MousePos.x,MousePos.y);
  369. end;
  370.  
  371. procedure MagnifyPointer; export; stdcall;
  372. var
  373.   CurCursor : HCursor;
  374. begin
  375.   CurCursor:=GetCursor;
  376.   If (CurCursor<>BIGPOINT) then begin
  377.     OldCursor:=CurCursor;
  378.     SetCursor(BIGPOINT);
  379.   end;
  380. end;
  381.  
  382. procedure ShrinkPointer; export; stdcall;
  383. var
  384.   CurCursor : HCursor;
  385. begin
  386.   CurCursor:=GetCursor;
  387.   If (CurCursor=BIGPOINT) then
  388.     SetCursor(OldCursor);
  389. end;
  390. {$ENDIF}
  391.  
  392. procedure ClickLeftButton; export; stdcall;
  393. var
  394.   MousePos : TPoint;
  395.   Lparam : Longint;
  396.   CurWin : HWND;
  397.   CurRect : TRect;
  398. begin
  399.   GetCursorPos(MousePos);
  400.   CurWin := WindowFromPoint(MousePos);
  401.   GetWindowRect(CurWin, CurRect);
  402.   Lparam:=MakeLong(MousePos.X-CurRect.Left, MousePos.Y-CurRect.Top);
  403.   SendMessage(CurWin,WM_LBUTTONDOWN,0,Lparam);
  404.   SendMessage(CurWin,WM_LBUTTONUP,0,Lparam);
  405. end;
  406.  
  407. procedure DoubleClickLeftButton; export; stdcall;
  408. var
  409.   MousePos : TPoint;
  410.   Lparam : Longint;
  411.   CurWin : HWND;
  412.   CurRect : TRect;
  413. begin
  414.   ClickLeftButton;
  415.   GetCursorPos(MousePos);
  416.   CurWin := WindowFromPoint(MousePos);
  417.   GetWindowRect(CurWin, CurRect);
  418.   Lparam:=MakeLong(MousePos.X-CurRect.Left, MousePos.Y-CurRect.Top);
  419.   SendMessage(CurWin,WM_LBUTTONDBLCLK,0,Lparam);
  420. end;
  421.  
  422. {procedure TypeA; far; export;
  423. begin
  424.   SuperRecorder.MacroSet1.SendText('a');
  425. end;
  426. }
  427. procedure SendKeysProc; export; stdcall;
  428. const
  429.   temp : pchar = '{ESC}4{+}5~'#0;
  430. begin
  431.   SuperRecorder.MacroSet1.SendKeys(temp, False);
  432.   while (SuperRecorder.MacroSet1.MacroState=msPlayback) do Application.ProcessMessages;
  433. end;
  434.  
  435. procedure TSuperRecorder.FormCreate(Sender: TObject);
  436. begin
  437.   BIGPOINT:=LoadCursor(hInstance,pchar(255));
  438.   With MacroSet1 do begin
  439.     FastPlay.Checked:=FastPlayback;
  440.     SysWide.Checked:=SystemWide;
  441.     MouseNone.Checked:=(RecordMouse=RMIgnore);
  442.     MouseClicks.Checked:=(RecordMouse=RMClicksAndDrags);
  443.     MouseEverything.Checked:=(RecordMouse=RMAll);
  444.     MousePointer.Checked:=(MouseBase=MBPointer);
  445.     MouseWindow.Checked:=(MouseBase=MBWindow);
  446.     MouseScreen.Checked:=(MouseBase=MBScreen);
  447.     CancelCheck.Checked:=CancelChecking;
  448.     CancelKey:=VK_CANCEL;
  449.     MacrosOn;
  450.     RecordKeyMsg.Caption:=RecordKeyMsg.Caption+KeyNames[ToggleRecordKey];
  451.     ScrapMacroKeyMsg.Caption:=ScrapMacroKeyMsg.Caption+KeyNames[Keys[-1]];
  452.     CancelKeyMsg.Caption:=CancelKeyMsg.Caption+KeyNames[CancelKey];
  453.     PauseKeyMsg.Caption:=PauseKeyMsg.Caption+KeyNames[PauseKey];
  454.     StatusBar1.Panels[0].Text:='DLL Version: '+Version;
  455.     If (ParamCount=0) then begin
  456.     {Install some demo code macros}
  457.     {$IFDEF DEMO}
  458.     Add(MK_CTRLALTC,ScrapMacro,'Run CALC.EXE',RunCalc);
  459.     Add(MK_CTRLNUMSLASH,ScrapMacro,'Run CLOCK.EXE',RunClock);
  460.     Add(MK_BACKQUOTE,ScrapMacro,'Send keys "{ESC}4{+}5~"',SendKeysProc);
  461.     Add(MK_MBTN,ScrapMacro,'Left mouse double click', DoubleClickLeftButton);
  462.     {$IFDEF BLINDGUY}
  463.     Add(MK_SHIFTUP,ScrapMacro,'Move mouse up',MoveMouseUp);
  464.     Add(MK_SHIFTDOWN,ScrapMacro,'Move mouse down',MoveMouseDown);
  465.     Add(MK_SHIFTLEFT,ScrapMacro,'Move mouse left',MoveMouseLeft);
  466.     Add(MK_SHIFTRIGHT,ScrapMacro,'Move mouse right',MoveMouseRight);
  467.     Add(MK_SHIFTNUM8,ScrapMacro,'Move mouse up',MoveMouseUp);
  468.     Add(MK_SHIFTNUM2,ScrapMacro,'Move mouse down',MoveMouseDown);
  469.     Add(MK_SHIFTNUM4,ScrapMacro,'Move mouse left',MoveMouseLeft);
  470.     Add(MK_SHIFTNUM6,ScrapMacro,'Move mouse right',MoveMouseRight);
  471.     Add(MK_SHIFTHOME,ScrapMacro,'Move mouse to upper left',MoveMouseUpperLeft);
  472.     Add(MK_SHIFTPGUP,ScrapMacro,'Move mouse to upper right',MoveMouseUpperRight);
  473.     Add(MK_SHIFTEND,ScrapMacro,'Move mouse to lower left',MoveMouseLowerLeft);
  474.     Add(MK_SHIFTPGDN,ScrapMacro,'Move mouse to lower right',MoveMouseLowerRight);
  475.     Add(MK_CTRLSHIFTCENTER,ScrapMacro,'Move mouse to screen center',MoveMouseCenter);
  476.     Add(MK_ALTSHIFTENTER,ScrapMacro,'Left mouse click',ClickLeftButton);
  477.     Add(MK_CTRLALTENTER,ScrapMacro,'Left mouse double click', DoubleClickLeftButton);
  478.     Add(MK_CTRLSHIFTM,ScrapMacro,'Magnify pointer',MagnifyPointer);
  479.     Add(MK_CTRLSHIFTS,ScrapMacro,'Shrink pointer',ShrinkPointer);
  480.     {$ENDIF}
  481.     {$ENDIF}
  482.     end else begin
  483.        OpenDialog1.FileName:=UpperCase(ParamStr(1));
  484.        ReadFromFile(OpenDialog1.FileName,true);
  485.     end;
  486.     CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
  487.     NumLockButton.Caption:='Num '+OffOn[NumLock];
  488.     ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
  489.   end;
  490. end;
  491.  
  492. procedure TSuperRecorder.MacroSet1Played(Sender: TObject; State: TUserMacroEngineState);
  493. begin
  494.   StatusBar1.Panels[1].Text:=MacroSet1.StateName[State];
  495. end;
  496.  
  497. procedure TSuperRecorder.SaveBtnClick(Sender: TObject);
  498. begin
  499.   If (SaveDialog1.FileName='') and (OpenDialog1.FileName<>'') then
  500.     SaveDialog1.FileName:=OpenDialog1.FileName;
  501.   If (SaveDialog1.Execute) then MacroSet1.SaveToFile(SaveDialog1.FileName);
  502. end;
  503.  
  504. procedure TSuperRecorder.LoadBtnClick(Sender: TObject);
  505. begin
  506.   If (OpenDialog1.Execute) then MacroSet1.ReadFromFile(OpenDialog1.FileName,Merge.Checked);
  507. end;
  508.  
  509. procedure TSuperRecorder.FormClose(Sender: TObject; var Action: TCloseAction);
  510. begin
  511.   MacroSet1.MacrosOff;
  512.   DestroyCursor(BIGPOINT);
  513. end;
  514.  
  515. procedure TSuperRecorder.btCreateCodeMacroClick(Sender: TObject);
  516. begin
  517.   try
  518.     OurWindow:=SuperRecorder.Handle;
  519.     With MacroSet1, MacroKeyComboBox1 do
  520.       If (MKey>0) then Add(MKey,ScrapMacro,edMacroName.Text,ExampleCodeMacroProcedure);
  521.   except
  522.   on Exception Do MessageBox(0,'An error occurred while adding the Code Macro','',MB_APPLMODAL);
  523.   end;
  524. end;
  525.  
  526. procedure TSuperRecorder.CancelCheckClick(Sender: TObject);
  527. begin
  528.   MacroSet1.CancelChecking:=CancelCheck.Checked;
  529. end;
  530.  
  531. procedure TSuperRecorder.DeleteBtnClick(Sender: TObject);
  532. begin
  533.   MacroSet1.Delete(MacroSet1.Keys[Pred(StringGrid1.Row)]);
  534. end;
  535.  
  536. procedure TSuperRecorder.MousePointerClick(Sender: TObject);
  537. begin
  538.   If MousePointer.Checked then MacroSet1.MouseBase:=MBPointer;
  539. end;
  540.  
  541. procedure TSuperRecorder.MouseWindowClick(Sender: TObject);
  542. begin
  543.   If MouseWindow.Checked then MacroSet1.MouseBase:=MBWindow;
  544. end;
  545.  
  546. procedure TSuperRecorder.MouseScreenClick(Sender: TObject);
  547. begin
  548.   If MouseScreen.Checked then MacroSet1.MouseBase:=MBScreen;
  549. end;
  550.  
  551. procedure TSuperRecorder.btSendKeysClick(Sender: TObject);
  552. begin
  553.   ActiveControl:=memo1;
  554.   macroset1.SendKeys(PChar(edSendKeys.Text), True);
  555. end;
  556.  
  557. procedure TSuperRecorder.MacroSet1Assigned(Sender: TObject;
  558.   Macro: Pointer);
  559. var
  560.   MMacs : word;
  561.   MCnt : byte;
  562. begin
  563.   With MacroSet1, StringGrid1 do begin
  564.     RowCount:=2;
  565.     Cells[0,0]:='Hot key';
  566.     Cells[1,0]:='Name';
  567.     Cells[0,1]:='';
  568.     Cells[1,1]:='';
  569.     MMacs:=MaxMacroNum;
  570.     For MCnt:=0 to pred(MMacs) do begin
  571.       try
  572.         Cells[0,Succ(MCnt)]:=KeyNames[Keys[MCnt]];
  573.         Cells[1,Succ(MCnt)]:=Names[Keys[MCnt]];
  574.       except
  575.         on EMacroNotFound Do begin
  576.           {We don't care about not finding our macros};
  577.           Cells[0,Succ(MCnt)]:='UNDEFINED';
  578.           Cells[1,Succ(MCnt)]:='UNDEFINED';
  579.         end;
  580.       end;
  581.       RowCount:=RowCount+1;
  582.     end;
  583.   end;
  584. end;
  585.  
  586. procedure TSuperRecorder.btAppActivateClick(Sender: TObject);
  587. begin
  588.   MacroSet1.AppActivate(edAppActivate.Text);
  589. end;
  590.  
  591. procedure TSuperRecorder.CapsLockButtonClick(Sender: TObject);
  592. begin
  593.   With MacroSet1 do begin
  594.     If CapsLock then CapsLock:=false
  595.     else CapsLock:=true;
  596.     CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
  597.   end;
  598. end;
  599.  
  600. procedure TSuperRecorder.ScrollLockButtonClick(Sender: TObject);
  601. begin
  602.   With MacroSet1 do begin
  603.     If ScrollLock then ScrollLock:=false
  604.     else ScrollLock:=true;
  605.     ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
  606.   end;
  607. end;
  608.  
  609. procedure TSuperRecorder.NumlockButtonClick(Sender: TObject);
  610. begin
  611.   With MacroSet1 do begin
  612.     If NumLock then NumLock:=false
  613.     else NumLock:=true;
  614.     NumLockButton.Caption:='Num '+OffOn[NumLock];
  615.   end;
  616. end;
  617.  
  618. procedure TSuperRecorder.FormActivate(Sender: TObject);
  619. begin
  620.   With MacroSet1 do begin
  621.     CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
  622.     NumLockButton.Caption:='Num '+OffOn[NumLock];
  623.     ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
  624.   end;
  625. end;
  626.  
  627. initialization
  628. end.
  629.